#pragma once

#include <vex/policy/protect_policy.h>
#include <vex/policy/empty_base.h>

namespace vex { namespace policy {
    template<class TClass, class TClassTraits, class TBase = policy::empty_base>
    struct arrow_reachable : public TBase {
        typename TClassTraits::item_type operator->() const
        {
            return static_cast<TClass const*>(this)->get();
        }

        VEX_PROTECT_POLICY(arrow_reachable);
    };
}}